// 存储登入人信息
import { login, getUserDetailById, getUserInfo } from '@/api/user'
import * as auth from '@/utils/auth'
export default {
  // 开启命名空间
  namespaced: true,
  // 定义数据变量（和组件data类似的） => 响应式的
  state: {
    // 默认从本地获取一份token
    token: auth.getToken() || '',
    // 当前登录人的信息
    user: {}
  },
  // 修改state定义的变量（只能通过它修改）只能执行同步代码
  mutations: {
    /**
     *
     *存储token
     * @param {*} state 定义数据变量state：object
     * @param {*} token 调用setToken方法传入要存储的token值
     */
    setToken (state, token) {
      state.token = token
      auth.setToken(token)
    },

    /**
     *
     *删除token
     * @param {*} state
     */
    removeToken (state) {
      state.token = null
      auth.removeToken()
    },

    /**
     *
     *
     * @param {*} state
     * @param {*} user 调用setUser传入用户的信息数据
     */
    setUser (state, user) {
      state.user = user
    },
    /**
     *
     *
     * @param {*} state
     */
    removeUser (state) {
      state.user = {}
    }
  },
  // 处理异步操作
  // 获取后台数据的方法 => 特点：异步
  actions: {
    /**
     *
     *
     * @param {*} ctx:object {commit}
     * @param {*} loginForm 登录表单数据{mobile，password}
     */
    async getTokenAction ({ commit }, loginForm) {
      // 调用登录接口获取token
      const res = await login(loginForm)
      // 调用mutations方法setToken存储
      commit('setToken', res)
    },
    /**
     *
     * @param {*} param 调用接口获取登录人信息
     */
    async getUserAction ({ commit }) {
      const res = await getUserInfo()
      const photo = await getUserDetailById(res.userId)
      commit('setUser', { ...res, ...photo })
    },
    /**
     *
     * 退出登入删除token和用户信息
     * @param {*} { commit }
     */
    logoutAction ({ commit }) {
      commit('removeToken')
      commit('removeUser')
    }
  }
}
